﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract;
using Pe.Petecos.Comercial.Aplicacion.Service.Base;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Seguridad;
using Pe.Petecos.Comercial.Cross.Core.Exception;
using Pe.Petecos.Comercial.Infraestructura.Core.Contract.Seguridad;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pe.Petecos.Comercial.Aplicacion.Service.Implements
{
    public class SeguridadService : GenericService, ISeguridadService
    {
        public IUsuarioRepository usuarioRepository { get; set; }
        public ProcessResult<List<DataUsuario>> Buscar(FiltroUsuario filtro)
        {
            //public string NombreCompleto { get; set; }
            ProcessResult<List<DataUsuario>> resultado = new ProcessResult<List<DataUsuario>>();
            try
            {
                var listado = usuarioRepository.Buscar(filtro.CodigoUsuario, filtro.CodigoEstado, filtro.NombreUsuarioCompleto);
                resultado.Result = listado.Select(x => new DataUsuario
                {
                    CodigoUsuario = x.CodigoUsuario,
                    CodigoPerfil = x.CodigoPerfil,
                    Nombre = x.Nombre,
                    ApellidoPaterno = x.ApellidoPaterno,
                    ApellidoMaterno = x.ApellidoMaterno,
                    CorreoElectronico = x.CorreoElectronico,
                    Cuenta = x.Cuenta,
                    Contrasena = x.Contrasena,
                    CodigoEstado = x.CodigoEstado,
                    NombreUsuarioCompleto = x.NombreUsuarioCompleto,
                }).ToList();

            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException<SeguridadService>(e);
            }

            return resultado;
        }
        public ProcessResult<DataUsuario> LoguearUsuario(string cuenta)
        {
            ProcessResult<DataUsuario> resultado = new ProcessResult<DataUsuario>();
            try
            {
                var usuario = usuarioRepository.Loguear(cuenta);

                if (usuario != null)
                {
                    resultado.Result = new DataUsuario
                    {
                        CodigoUsuario = usuario.CodigoUsuario,
                        CodigoPerfil = usuario.CodigoPerfil,
                        Nombre = usuario.Nombre,
                        ApellidoPaterno = usuario.ApellidoPaterno,
                        ApellidoMaterno = usuario.ApellidoMaterno,
                        CorreoElectronico = usuario.CorreoElectronico,
                        Cuenta = usuario.Cuenta,
                        Contrasena = usuario.Contrasena,
                        CodigoEstado = usuario.CodigoEstado
                    };
                }
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException<SeguridadService>(e);
            }

            return resultado;
        }

        public void Dispose()
        {

        }


    }
}
